Encuesta Intercensal 2015

La Encuesta Intercensal se guarda en un un archivo _Base 2020.RData.

data <- read_sav("~/Persona.-Encuesta Intercensal 2015.sav")

save(data, 
      file = paste0(here::here(), "/Bases/Encuesta Intercensal_2015.RData"))

Se seleccionan las variables que se desean conservar para la realización de este documento y se guarda en un archivo _Base 2020.RData para practicidad del manejo de datos.

load(paste0(here::here(), "/Bases/Encuesta Intercensal_2015.RData"))

mydata <- data %>%
           select(CVE_ENT, NOM_ENT, MUN, NOM_MUN, ENT_MUN, ENT_PAIS_NAC, ENT_PAIS_RES10, ENT_MUN_RES_2010,
                  ENT_PAIS_TRAB, MUN_TRAB, ENT_MUN_TRAB, ENT_PAIS_ASI, MUN_ASI, ENT_MUN_ASI_ESC,
                  EDAD, SEXO, AFRODES, HLENGUA, QDIALECT_INALI, PERTE_INDIGENA, ALFABET, SITUA_CONYUGAL, 
                  HIJOS_NAC_VIVOS, CONACT, OCUPACION_C, SITUACION_TRAB, VACACIONES, SERVICIO_MEDICO, INCAP_SUELDO, 
                  INGTRMEN, ACTIVIDADES_C, TIE_TRASLADO_TRAB,  MED_TRASLADO_TRAB1, MED_TRASLADO_TRAB2, MED_TRASLADO_TRAB3, 
                  ASISTEN, NIVACAD, ESCOLARI, ESCOACUM, TIE_TRASLADO_ESCU, MED_TRASLADO_ESC1, MED_TRASLADO_ESC2, 
                  MED_TRASLADO_ESC3, FACTOR, ESTRATO, UPM) %>%
            rename("CVE_MUN" = "ENT_MUN",
                   "CVE_MUN_ASI" = "ENT_MUN_ASI_ESC",
                   "CVE_MUN_TRABAJO" = "ENT_MUN_TRAB",
                   "CVE_MUN_RES" = "ENT_MUN_RES_2010")

Zonas Metropolitanas 2020

Se anexa la base de datos de las Zonas Metropolitanas 2020 a la base orginal

ZM_2020 <- read.xlsx(paste0(here::here(), "/Bases/Municipio/ZM_2020_Base 2020.xlsx"), 
                      startRow = 7, 
                       skipEmptyRows = TRUE) %>%
            select(CVE_ZM, NOM_ZM, CVE_ENT, NOM_ENT, CVE_MUN, NOM_MUN, MC, CF) %>%
             mutate(CVE_ENT = stringr::str_pad(.$CVE_ENT, width = 3, side = c("left"), pad = "0"),
                    CVE_MUN = stringr::str_pad(.$CVE_MUN, width = 6, side = c("left"), pad = "0"))

Se asignan las claves de las zonas metropolitanas de acuerdo a las diferentes variables de interes:

  • Residencia hace 5 años

  • Laboral

  • Estudiantil

mydata <- mydata %>%
           # Zonas Metropolitanas por residenicia
           left_join(., ZM_2020 %>% select(-CVE_ENT), by = c("CVE_MUN")) %>%
            # Zonas Metropolitanas en el lugar de residencia hace 5 años
            left_join(., ZM_2020 %>% select(-CVE_ENT) %>% 
                           rename("CVE_ZM_RES" = "CVE_ZM",
                                  "ZM_RES" = "NOM_ZM"), by = c("CVE_MUN_RES" = "CVE_MUN")) %>%
             # Zonas Metropolitanas en el lugar de trabajo
             left_join(., ZM_2020 %>% select(-CVE_ENT) %>% 
                             rename("CVE_ZM_TRABAJO" = "CVE_ZM",
                                    "ZM_TRABAJO" = "NOM_ZM"), by = c("CVE_MUN_TRABAJO" = "CVE_MUN")) %>%
              # Zonas Metropolitanas en el lugar de estudio
              left_join(., ZM_2020 %>% select(-CVE_ENT) %>% 
                            rename("CVE_ZM_ASI" = "CVE_ZM",
                                   "ZM_ASI" = "NOM_ZM"), by = c("CVE_MUN_ASI" = "CVE_MUN"))

save(mydata, file = paste0(here::here(), "/Bases/06_Migracion por Zonas Metropolitanas_2015_Base 2020.RData"))          

✔️A partir de aquí se pueden correr los códidos 👇.

Se carga el archivo Migracion por Zonas Metropolitanas_2015_Base 2020.RData.

load(file = paste0(here::here(), "/Bases/06_Migracion por Zonas Metropolitanas_2015_Base 2020.RData"))

# Para fines prácticos se genera un ponderador de uno 
mydata <- mydata %>%
           select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
                  EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
           mutate(M = 1)

# Se vuelve a cargar la base de datos para fines practicos
ZM_2020 <- read.xlsx(paste0(here::here(), "/Bases/Municipio/ZM_2020.xlsx"), 
                      startRow = 7, 
                       skipEmptyRows = TRUE) %>%
            select(CVE_ZM, NOM_ZM, CVE_ENT, NOM_ENT, CVE_MUN, NOM_MUN, MC, CF) %>%
             mutate(CVE_ENT = stringr::str_pad(.$CVE_ENT, width = 3, side = c("left"), pad = "0"),
                    CVE_MUN = stringr::str_pad(.$CVE_MUN, width = 6, side = c("left"), pad = "0"))

Entidades y Municipios

Se genera un vector con el nombre de las entidades llamado estados para facilitar los filtros en el documento.
Se genera un vector con las abreviaturas de las entidades llamado ent para fines prácticos.
Se genera un vector con las claves de los municipios, pero es importante hacer notar que tres municipios no entraron el muestreo del Cuestionario Ampliado.

# Claves de los estados
estados <- sjlabelled::get_labels(mydata$CVE_ENT)

nom_estados <- c( "Aguascalientes", "Baja California" ,"Baja California Sur", "Campeche", "Coahuila de Zaragoza",
                  "Colima", "Chiapas", "Chihuahua", "Ciudad de México", "Durango", "Guanajuato", "Guerrero", "Hidalgo",
                  "Jalisco", "México", "Michoacán de Ocampo", "Morelos", "Nayarit", "Nuevo León", "Oaxaca", "Puebla", 
                  "Querétaro", "Quintana Roo", "San Luis Potosí", "Sinaloa", "Sonora", "Tabasco", "Tamaulipas", "Tlaxcala", 
                  "Veracruz de Ignacio de la Llave", "Yucatán", "Zacatecas")

est <- c("AGS", "BC", "BCS", "CAMP", "COAH", "COL", "CHIS", "CHIH", "CDMX", "DGO", "GTO", "GRO", "HGO",
         "JAL", "MEX", "MICH", "MOR", "NAY", "NL", "OAX", "PUE", "QRO", "QROO", "SLP","SIN","SON", "TAB", 
         "TAMS", "TLX", "VER", "YUC", "ZAC")

# Claves de los municipios
MUN <- readRDS(paste0(here::here(), "/Bases/municipios_2015.RDS"))
nom_municipios <- sjlabelled::get_labels(MUN$NOM_MUN) %>% as.factor()
municipios <- sjlabelled::get_labels(MUN$CVE_MUN) %>% as.factor()
#saveRDS(MUN, file = paste0(here::here(), "/Bases/municipios_2015.RDS"))

# Claves de las zonas metropolitanas
zm <- sjlabelled::get_labels(mydata$CVE_ZM)[-2]
nom_zm <- sjlabelled::get_labels(mydata$NOM_ZM)[-2]

Movilidad laboral

Movilidad interna

Matrices

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios) %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

#MC %>%
 #group_by(I_ZM) %>%
  #summarise(Total = format(sum(FACTOR), big.mark   = " ", scientific = FALSE))

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_municipal_Base 2020.RDS"))
MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_municipal_Base 2020.RDS"))

Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)

Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.

Migrantes <- Migrantes %>%
              as.data.frame() %>%
               expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
                as.data.frame() %>%
                 rename("CVE_MUN" = "row_labels") %>% 
                  arrange(CVE_MUN) %>%
                   slice(-1) 
            
rownames <- Migrantes %>% 
             mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>% 
              pull(CVE_MUN)

colnames <- names(Migrantes) %>% 
             as.data.frame() %>% 
              slice(-1) %>% 
               rename("CVE_MUN" = ".") %>%
                mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
                 pull(CVE_MUN)

# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
              select(-CVE_MUN)

rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames

saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel municipal 2015_Base 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel municipal 2015_Base 2020.RData"))

require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Reciente")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel municipal 2015_Base 2020.xlsx"), overwrite = TRUE)

Matriz de movilidad laboral a nivel municipal, 2015

Matriz de movilidad laboral por zonas metropolitanas
Nivel municipal
CVE_MUN 001001 001002 001003 001004 001005 001006 001007 001008 001009 001010 001011 002001 002002 002003 002004 002005 003001 003002 003003 003008 003009 004001 004002 004003 004004 004005 004006 004007 004008
001001 349088 325 586 0 3322 613 558 31 87 369 3201 0 0 0 70 0 0 0 0 51 0 0 0 12 0 0 0 0 0
001002 2809 8687 10 4 64 172 46 3 72 50 322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001003 223 0 18721 0 57 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001004 615 0 1 2679 115 27 247 4 25 0 538 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001005 16934 42 282 29 28940 138 147 63 37 27 1963 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001006 2288 111 15 17 673 9232 531 43 237 8 2696 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001007 2131 63 30 236 410 337 11655 34 210 8 1417 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001008 407 3 3 3 41 73 32 2071 2 4 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001009 794 55 12 8 102 244 490 13 3714 2 671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001010 1867 66 14 2 20 4 4 0 2 3561 40 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001011 4375 54 18 3 870 400 98 26 30 10 10829 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002001 0 0 0 0 0 0 0 0 0 0 0 200010 146 145 412 95 0 72 0 53 0 0 2 0 0 0 0 0 0
002002 0 0 0 0 0 0 0 0 0 0 0 107 392362 115 329 0 0 25 0 29 0 0 0 0 0 0 0 0 0
002003 0 0 0 0 0 0 0 0 0 0 0 52 87 37725 990 41 0 0 0 0 0 0 0 0 0 0 0 0 0
002004 0 0 0 0 0 0 0 0 0 0 0 564 274 1487 664036 2991 0 0 27 42 0 0 19 0 0 0 0 0 0
002005 0 0 0 0 0 0 0 0 0 0 0 145 19 25 4620 31195 0 0 24 0 0 0 0 0 0 0 0 0 0
003001 0 0 0 0 0 0 0 0 0 0 0 12 0 0 6 0 28386 25 121 31 64 0 6 0 0 0 0 0 0
003002 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 23932 16 5 0 0 0 0 0 0 0 0 0
003003 0 0 0 0 0 0 0 0 0 0 0 15 0 0 33 0 154 169 119392 753 15 0 0 0 0 0 0 0 0
003008 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 472 132246 0 0 0 0 0 0 0 0 0
003009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 21 21 14 4 7614 0 0 0 0 0 0 0 0
004001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15525 1160 343 210 182 118 5 57
004002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 117769 1071 765 227 169 68 122
004003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 164 99583 30 0 0 16 0
004004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 1153 655 33436 2 11 18 12
004005 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 180 1181 311 104 8214 37 17 270
004006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 401 59 43 6 12405 3 39
004007 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 2943 0
004008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 669 31 15 40 14 1 3196
004009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 278 52 0 1 3 0
Fuente: Estimaciones del CONAPO.

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_MUN) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
###################### Población de 15 años y más ##############################
Pob.ocupada <- mydata %>%
                as.data.frame() %>%
                 mutate(EDAD = as.numeric(.$EDAD)) %>%
                  subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                   group_by(CVE_MUN) %>%
                    summarise(Pob.ocupada = sum(FACTOR)) 

################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel municipal 2015_Base 2020.RData"))

Residentes <- Migrantes %>%
               rownames_to_column() %>%
                gather(CVE_MUN, Value, -rowname)%>%
                 filter(rowname == CVE_MUN) %>%
                  select(-rowname) %>%
                   droplevels() %>%
                    rename("Residentes" = "Value") 

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>% 
                as.data.frame() %>%
                 tibble::rownames_to_column(var = "CVE_MUN") %>%
                  melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                   mutate_at(vars(3), as.numeric) %>%
                    as_tibble() %>%
                     filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                      group_by(CVE_MUN) %>%
                       summarise(Inmigrantes = sum(value, na.rm = TRUE))

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>% 
               as.data.frame() %>%
                tibble::rownames_to_column(var = "CVE_MUN") %>%
                 melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                  mutate_at(vars(3), as.numeric) %>%
                   as_tibble() %>%
                    filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                     group_by(CVE_MUN_TRABAJO) %>%
                      summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
                       rename("CVE_MUN" = "CVE_MUN_TRABAJO") 

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
          left_join(., Residentes, by = c("CVE_MUN")) %>%
          left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
          left_join(., Emigrantes, by = c("CVE_MUN")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Municipal)_Base 2020.xlsx"), overwrite = TRUE)

save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Municipal)_Base 2020.RData"))
Indicadores de movilidad laboral a nivel municipal
Zonas Metropolitanas
CVE_MUN Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
001001 877 190 382 550 349 088 14 667 42 159 −27 492 56 826 4.66 13.39 −8.7 −84 318
001002 46 464 13 914 8 687 4 146 1 290 2 856 5 436 27.47 8.55 18.9 −2 580
001003 56 048 20 099 18 721 405 1 232 −827 1 637 2.13 6.47 −4.3 −2 464
001004 15 577 4 869 2 679 1 873 445 1 428 2 318 36.64 8.71 27.9 −890
001005 120 405 51 020 28 940 20 201 5 798 14 403 25 999 47.14 13.53 33.6 −11 596
001006 46 473 16 904 9 232 6 811 2 037 4 774 8 848 42.99 12.86 30.1 −4 074
001007 53 866 17 891 11 655 5 235 2 380 2 855 7 615 29.18 13.27 15.9 −4 760
001008 8 896 2 994 2 071 695 219 476 914 23.38 7.37 16.0 −438
001009 20 926 6 446 3 714 2 463 731 1 732 3 194 35.99 10.68 25.3 −1 462
001010 20 245 6 276 3 561 2 164 519 1 645 2 683 32.64 7.83 24.8 −1 038
001011 46 454 17 729 10 829 6 041 11 207 −5 166 17 248 37.65 69.84 −32.2 −22 414
002001 486 639 210 634 200 010 1 067 1 474 −407 2 541 0.61 0.85 −0.2 −2 948
002002 988 417 429 396 392 362 2 215 4 062 −1 847 6 277 0.62 1.15 −0.5 −8 124
002003 102 406 42 851 37 725 1 207 1 832 −625 3 039 3.32 5.04 −1.7 −3 664
002004 1 641 570 741 226 664 036 6 388 8 581 −2 193 14 969 1.07 1.44 −0.4 −17 162
002005 96 734 39 695 31 195 4 954 3 133 1 821 8 087 14.52 9.19 5.3 −6 266
003001 72 564 29 698 28 386 290 180 110 470 1.13 0.70 0.4 −360
003002 60 171 25 292 23 932 96 491 −395 587 0.45 2.30 −1.8 −982
003003 272 711 125 680 119 392 1 473 1 409 64 2 882 1.48 1.41 0.1 −2 818
003008 287 671 137 887 132 246 804 2 024 −1 220 2 828 0.76 1.90 −1.1 −4 048
Fuente: Estimaciones del CONAPO.

Movilidad intramunicipal

Matrices

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "Pertenecen a la Zona Metropolitana") %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intramunicipal_Base 2020.RDS"))

Se genera una matriz cruzada del lugar de residencia a nivel municipal, utilizando la función svytable de la paquetería survey.

MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intramunicipal_Base 2020.RDS"))

Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)

Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.

Migrantes <- Migrantes %>%
              as.data.frame() %>%
               expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
                as.data.frame() %>%
                 rename("CVE_MUN" = "row_labels") %>% 
                  arrange(CVE_MUN) %>%
                   slice(-1) 
            
rownames <- Migrantes %>% 
             mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>% 
              pull(CVE_MUN)

colnames <- names(Migrantes) %>% 
             as.data.frame() %>% 
              slice(-1) %>% 
               rename("CVE_MUN" = ".") %>%
                mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
                 pull(CVE_MUN)

# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
              select(-CVE_MUN)

rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames

saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intramunicipal 2015_Base 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intramunicipal 2015_Base 2020.RData"))

require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Intramunicipal")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intramunicipal 2015_Base 2020.xlsx"), overwrite = TRUE)

Matriz de movilidad laboral a nivel municipal, 2015

Matriz de movilidad laboral por zonas metropolitanas
Nivel intramunicipal
CVE_MUN 001001 001002 001003 001004 001005 001006 001007 001008 001009 001010 001011 002001 002002 002003 002004 002005 003001 003002 003003 003008 003009 004001 004002 004003 004004 004005 004006 004007 004008
001001 349088 0 0 0 3322 0 0 0 0 0 3201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001002 0 8687 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001003 0 0 18721 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001004 0 0 0 2679 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001005 16934 0 0 0 28940 0 0 0 0 0 1963 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001006 0 0 0 0 0 9232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001007 0 0 0 0 0 0 11655 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001008 0 0 0 0 0 0 0 2071 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001009 0 0 0 0 0 0 0 0 3714 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001010 0 0 0 0 0 0 0 0 0 3561 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001011 4375 0 0 0 870 0 0 0 0 0 10829 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002001 0 0 0 0 0 0 0 0 0 0 0 2e+05 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002002 0 0 0 0 0 0 0 0 0 0 0 0 392362 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002003 0 0 0 0 0 0 0 0 0 0 0 0 0 37725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 664036 2991 0 0 0 0 0 0 0 0 0 0 0 0 0
002005 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4620 31195 0 0 0 0 0 0 0 0 0 0 0 0 0
003001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28386 0 0 0 0 0 0 0 0 0 0 0 0
003002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23932 0 0 0 0 0 0 0 0 0 0 0
003003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119392 0 0 0 0 0 0 0 0 0 0
003008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132246 0 0 0 0 0 0 0 0 0
003009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7614 0 0 0 0 0 0 0 0
004001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15525 0 0 0 0 0 0 0
004002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 117769 0 0 0 0 0 0
004003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99583 0 0 0 0 0
004004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33436 0 0 0 0
004005 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8214 0 0 0
004006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12405 0 0
004007 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2943 0
004008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3196
004009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Fuente: Estimaciones del CONAPO.

Matrices por zonas metropolitanas

MR <- NULL
for(i in 1:length(zm)){
tabla <- ZM_2020 %>%
          filter(CVE_MUN %in% municipios) %>%
           select(CVE_ZM, CVE_MUN) %>%
            filter(CVE_ZM %in% zm[i]) %>%
             pull(CVE_MUN)

MR[[paste0(zm[i])]] <- Migrantes %>%
                        as.data.frame() %>%
                         tibble::rownames_to_column(var = "CVE_MUN") %>%
                          mutate_if(is.numeric, as.numeric) %>%
                           select(CVE_MUN, tabla) %>%
                            filter(CVE_MUN %in% tabla)
}

# Se guardan en un objeto de R 
saveRDS(MR, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matrices de MTrab a nivel intramunicipal por ZM2015_Base 2020.RDS"))

# Se genera un Excel con todas las matrices por ZM
wb <- createWorkbook()
for(i in 1:length(zm)){
addWorksheet(wb, paste0(zm[i]))
writeData(wb, i, MR[[paste0(zm[i])]] %>% as.data.frame())
saveWorkbook(wb, 
              file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matrices de MTrab a nivel intramunicipal por ZM2015_Base 2020.xlsx"), 
               overwrite = TRUE)
}

Matriz de movilidad laboral en la Zona Metropolitana de Cuernavaca, 2015

Matriz de movilidad laboral a nivel intramunicipal
Zona Metropolitana de Cuernavaca
CVE_MUN 017007 017008 017009 017011 017018 017020 017028 017029
017007 146533 1023 98 2951 1266 256 414 642
017008 8547 23735 19 4755 1598 0 884 177
017009 1580 25 5588 104 21 31 14 7
017011 25185 2010 82 60814 1041 202 659 560
017018 12941 981 30 1375 26679 16 1024 84
017020 3371 64 9 1769 48 13094 28 533
017028 5460 739 12 662 1857 17 15892 56
017029 2685 116 0 1466 83 404 51 31759
Fuente: Estimaciones del CONAPO.

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_MUN) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
##################### Población de 15 años y más ###############################
Pob.ocupada <- mydata %>%
              as.data.frame() %>%
               mutate(EDAD = as.numeric(.$EDAD)) %>%
                subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                 group_by(CVE_MUN) %>%
                  summarise(Pob.ocupada = sum(FACTOR)) 

################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intramunicipal 2015_Base 2020.RData"))

Residentes <- Migrantes %>%
               rownames_to_column() %>%
                gather(CVE_MUN, Value, -rowname)%>%
                 filter(rowname == CVE_MUN) %>%
                  select(-rowname) %>%
                   droplevels() %>%
                    rename("Residentes" = "Value") 

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>% 
                as.data.frame() %>%
                 tibble::rownames_to_column(var = "CVE_MUN") %>%
                  melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                   mutate_at(vars(3), as.numeric) %>%
                    as_tibble() %>%
                     filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                      group_by(CVE_MUN) %>%
                       summarise(Inmigrantes = sum(value, na.rm = TRUE))

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>% 
               as.data.frame() %>%
                tibble::rownames_to_column(var = "CVE_MUN") %>%
                 melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                  mutate_at(vars(3), as.numeric) %>%
                   as_tibble() %>%
                    filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                     group_by(CVE_MUN_TRABAJO) %>%
                      summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
                       rename("CVE_MUN" = "CVE_MUN_TRABAJO") 

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
          left_join(., Residentes, by = c("CVE_MUN")) %>%
          left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
          left_join(., Emigrantes, by = c("CVE_MUN")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intramunicipal)_Base 2020.xlsx"), overwrite = TRUE)

save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intramunicipal)_Base 2020.RData"))
Indicadores de movilidad laboral a nivel intramunicipal
Zonas Metropolitanas
CVE_MUN Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
001001 877 190 382 550 349 088 6 523 21 309 −14 786 27 832 2.1 6.77 −4.7 −42 618
001002 46 464 13 914 8 687 0 0 0 0 0.0 0.00 0.0 0
001003 56 048 20 099 18 721 0 0 0 0 0.0 0.00 0.0 0
001004 15 577 4 869 2 679 0 0 0 0 0.0 0.00 0.0 0
001005 120 405 51 020 28 940 18 897 4 192 14 705 23 089 44.1 9.78 34.3 −8 384
001006 46 473 16 904 9 232 0 0 0 0 0.0 0.00 0.0 0
001007 53 866 17 891 11 655 0 0 0 0 0.0 0.00 0.0 0
001008 8 896 2 994 2 071 0 0 0 0 0.0 0.00 0.0 0
001009 20 926 6 446 3 714 0 0 0 0 0.0 0.00 0.0 0
001010 20 245 6 276 3 561 0 0 0 0 0.0 0.00 0.0 0
001011 46 454 17 729 10 829 5 245 5 164 81 10 409 32.7 32.18 0.5 −10 328
002001 486 639 210 634 200 010 0 0 0 0 0.0 0.00 0.0 0
002002 988 417 429 396 392 362 0 0 0 0 0.0 0.00 0.0 0
002003 102 406 42 851 37 725 0 0 0 0 0.0 0.00 0.0 0
002004 1 641 570 741 226 664 036 2 991 4 620 −1 629 7 611 0.5 0.78 −0.3 −9 240
002005 96 734 39 695 31 195 4 620 2 991 1 629 7 611 13.5 8.77 4.8 −5 982
003001 72 564 29 698 28 386 0 0 0 0 0.0 0.00 0.0 0
003002 60 171 25 292 23 932 0 0 0 0 0.0 0.00 0.0 0
003003 272 711 125 680 119 392 0 0 0 0 0.0 0.00 0.0 0
003008 287 671 137 887 132 246 0 0 0 0 0.0 0.00 0.0 0
Fuente: Estimaciones del CONAPO.

Migración intermunicipal

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "No pertenecen a la Zona Metropolitana") %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intermunicipal_Base 2020.RDS"))

Matrices

Se genera una matriz cruzada del lugar de residencia a nivel municipal, utilizando la función svytable de la paquetería survey.

MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intermunicipal_Base 2020.RDS"))

Migrantes <- svytable(~CVE_MUN_TRABAJO + CVE_MUN, design = MC)

Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.

Migrantes <- Migrantes %>%
              as.data.frame() %>%
               expss::cross_cases(CVE_MUN, CVE_MUN_TRABAJO, weight = Freq) %>%
                as.data.frame() %>%
                 rename("CVE_MUN" = "row_labels") %>% 
                  arrange(CVE_MUN) %>%
                   slice(-1) 
            
rownames <- Migrantes %>% 
             mutate(CVE_MUN = substr(.$CVE_MUN, 9, 16)) %>% 
              pull(CVE_MUN)

colnames <- names(Migrantes) %>% 
             as.data.frame() %>% 
              slice(-1) %>% 
               rename("CVE_MUN" = ".") %>%
                mutate(`CVE_MUN` = substr(.$CVE_MUN, 17, 22)) %>%
                 pull(CVE_MUN)

# Se elimina la variable CVE_MUN
Migrantes <- Migrantes %>%
              select(-CVE_MUN)

rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames

saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intermunicipal 2015_Base 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intermunicipal 2015_Base 2020.RData"))

require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Intermunicipal")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_MUN"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intermunicipal 2015_Base 2020.xlsx"), overwrite = TRUE)

Matriz de movilidad laboral a nivel municipal, 2015

Matriz de movilidad laboral por zonas metropolitanas
Nivel intermunicipal
CVE_MUN 001001 001002 001003 001004 001005 001006 001007 001008 001009 001010 001011 002001 002002 002003 002004 002005 003001 003002 003003 003008 003009 004001 004002 004003 004004 004005 004006 004007 004008
001001 0 325 586 0 0 613 558 31 87 369 0 0 0 0 70 0 0 0 0 51 0 0 0 12 0 0 0 0 0
001002 2809 0 10 4 64 172 46 3 72 50 322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001003 223 0 0 0 57 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001004 615 0 1 0 115 27 247 4 25 0 538 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001005 0 42 282 29 0 138 147 63 37 27 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001006 2288 111 15 17 673 0 531 43 237 8 2696 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001007 2131 63 30 236 410 337 0 34 210 8 1417 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001008 407 3 3 3 41 73 32 0 2 4 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001009 794 55 12 8 102 244 490 13 0 2 671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001010 1867 66 14 2 20 4 4 0 2 0 40 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
001011 0 54 18 3 0 400 98 26 30 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
002001 0 0 0 0 0 0 0 0 0 0 0 0 146 145 412 95 0 72 0 53 0 0 2 0 0 0 0 0 0
002002 0 0 0 0 0 0 0 0 0 0 0 107 0 115 329 0 0 25 0 29 0 0 0 0 0 0 0 0 0
002003 0 0 0 0 0 0 0 0 0 0 0 52 87 0 990 41 0 0 0 0 0 0 0 0 0 0 0 0 0
002004 0 0 0 0 0 0 0 0 0 0 0 564 274 1487 0 0 0 0 27 42 0 0 19 0 0 0 0 0 0
002005 0 0 0 0 0 0 0 0 0 0 0 145 19 25 0 0 0 0 24 0 0 0 0 0 0 0 0 0 0
003001 0 0 0 0 0 0 0 0 0 0 0 12 0 0 6 0 0 25 121 31 64 0 6 0 0 0 0 0 0
003002 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 16 5 0 0 0 0 0 0 0 0 0
003003 0 0 0 0 0 0 0 0 0 0 0 15 0 0 33 0 154 169 0 753 15 0 0 0 0 0 0 0 0
003008 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 472 0 0 0 0 0 0 0 0 0 0
003009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 21 21 14 4 0 0 0 0 0 0 0 0 0
004001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1160 343 210 182 118 5 57
004002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 56 0 1071 765 227 169 68 122
004003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 164 0 30 0 0 16 0
004004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 1153 655 0 2 11 18 12
004005 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 180 1181 311 104 0 37 17 270
004006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 401 59 43 6 0 3 39
004007 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0
004008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 669 31 15 40 14 1 0
004009 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 113 278 52 0 1 3 0
Fuente: Estimaciones del CONAPO.

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_MUN) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
##################### Población de 15 años y más ###############################
Pob.ocupada <- mydata %>%
                as.data.frame() %>%
                 mutate(EDAD = as.numeric(.$EDAD)) %>%
                  subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                   group_by(CVE_MUN) %>%
                    summarise(Pob.ocupada = sum(FACTOR)) 

################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intermunicipal 2015_Base 2020.RData"))

Residentes <- Migrantes %>%
               rownames_to_column() %>%
                gather(CVE_MUN, Value, -rowname)%>%
                 filter(rowname == CVE_MUN) %>%
                  select(-rowname) %>%
                   droplevels() %>%
                    rename("Residentes" = "Value") 

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- Migrantes %>% 
                as.data.frame() %>%
                 tibble::rownames_to_column(var = "CVE_MUN") %>%
                  melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                   mutate_at(vars(3), as.numeric) %>%
                    as_tibble() %>%
                     filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                      group_by(CVE_MUN) %>%
                       summarise(Inmigrantes = sum(value, na.rm = TRUE))

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- Migrantes %>% 
               as.data.frame() %>%
                tibble::rownames_to_column(var = "CVE_MUN") %>%
                 melt(., id.vars = "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                  mutate_at(vars(3), as.numeric) %>%
                   as_tibble() %>%
                    filter(CVE_MUN != CVE_MUN_TRABAJO) %>%
                     group_by(CVE_MUN_TRABAJO) %>%
                      summarise(Emigrantes = sum(value, na.rm = TRUE)) %>%
                       rename("CVE_MUN" = "CVE_MUN_TRABAJO") 

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_MUN")) %>%
          left_join(., Residentes, by = c("CVE_MUN")) %>%
          left_join(., Inmigrantes, by = c("CVE_MUN")) %>%
          left_join(., Emigrantes, by = c("CVE_MUN")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, 
            file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intermunicipal)_Base 2020.xlsx"), 
             overwrite = TRUE)

save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intermunicipal)_Base 2020.RData"))
Indicadores de movilidad laboral a nivel intermunicipal
Zonas Metropolitanas
CVE_MUN Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
001001 877 190 382 550 0 8 144 20 850 −12 706 28 994 2.59 6.62 −4.0 −41 700
001002 46 464 13 914 0 4 146 1 290 2 856 5 436 27.47 8.55 18.9 −2 580
001003 56 048 20 099 0 405 1 232 −827 1 637 2.13 6.47 −4.3 −2 464
001004 15 577 4 869 0 1 873 445 1 428 2 318 36.64 8.71 27.9 −890
001005 120 405 51 020 0 1 304 1 606 −302 2 910 3.04 3.75 −0.7 −3 212
001006 46 473 16 904 0 6 811 2 037 4 774 8 848 42.99 12.86 30.1 −4 074
001007 53 866 17 891 0 5 235 2 380 2 855 7 615 29.18 13.27 15.9 −4 760
001008 8 896 2 994 0 695 219 476 914 23.38 7.37 16.0 −438
001009 20 926 6 446 0 2 463 731 1 732 3 194 35.99 10.68 25.3 −1 462
001010 20 245 6 276 0 2 164 519 1 645 2 683 32.64 7.83 24.8 −1 038
001011 46 454 17 729 0 796 6 043 −5 247 6 839 4.96 37.66 −32.7 −12 086
002001 486 639 210 634 0 1 067 1 474 −407 2 541 0.61 0.85 −0.2 −2 948
002002 988 417 429 396 0 2 215 4 062 −1 847 6 277 0.62 1.15 −0.5 −8 124
002003 102 406 42 851 0 1 207 1 832 −625 3 039 3.32 5.04 −1.7 −3 664
002004 1 641 570 741 226 0 3 397 3 961 −564 7 358 0.57 0.66 −0.1 −7 922
002005 96 734 39 695 0 334 142 192 476 0.98 0.42 0.6 −284
003001 72 564 29 698 0 290 180 110 470 1.13 0.70 0.4 −360
003002 60 171 25 292 0 96 491 −395 587 0.45 2.30 −1.8 −982
003003 272 711 125 680 0 1 473 1 409 64 2 882 1.48 1.41 0.1 −2 818
003008 287 671 137 887 0 804 2 024 −1 220 2 828 0.76 1.90 −1.1 −4 048
Fuente: Estimaciones del CONAPO.

Movilidad metropolitana

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios) %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_metropolitana_Base 2020.RDS"))

Matrices

Se genera una matriz cruzada del lugar de residencia a nivel municipal, utilizando la función svytable de la paquetería survey.

MC <- readRDS(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_metropolitana_Base 2020.RDS"))

Migrantes <- svytable(~CVE_ZM_TRABAJO + CVE_ZM, design = MC)

Se genera la matriz cuadrada y se le asignan las etiquetas de municipios.

Migrantes <- Migrantes %>%
              as.data.frame() %>%
               expss::cross_cases(CVE_ZM, CVE_ZM_TRABAJO, weight = Freq) %>%
                as.data.frame() %>%
                 rename("CVE_ZM" = "row_labels") %>% 
                  arrange(CVE_ZM) %>%
                   slice(-1) 
            
rownames <- Migrantes %>% 
             mutate(CVE_ZM = substr(.$CVE_ZM, 8, 12)) %>% 
              pull(CVE_ZM)

colnames <- names(Migrantes) %>% 
             as.data.frame() %>% 
              slice(-1) %>% 
               rename("CVE_ZM" = ".") %>%
                mutate(`CVE_ZM` = substr(.$CVE_ZM, 16, 20)) %>%
                 pull(CVE_ZM)

# Se elimina la variable CVE_ZM
Migrantes <- Migrantes %>%
              select(-CVE_ZM)

rownames(Migrantes) <- rownames
colnames(Migrantes) <- colnames

saveRDS(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de Movilidad laboral a nivel metropolitano 2015_Base 2020.RDS"))
save(Migrantes, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de Movilidad laboral a nivel metropolitano 2015_Base 2020.RData"))

require(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "M.Metropolitano")
writeData(wb, 1, Migrantes %>% as.data.frame() %>% tibble::rownames_to_column(var = "CVE_ZM"), colNames = TRUE)
saveWorkbook(wb, file = paste0(here::here(), "/Bases/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de Movilidad laboral a nivel metropolitano 2015_Base 2020.xlsx"), overwrite = TRUE)

Matriz de Movilidad laboral a nivel municipal, 2015

Matriz de Movilidad laboral por zonas metropolitanas
Zonas metropolitanas
CVE_ZM 01.01 02.01 02.02 02.03 03.01 03.02 04.01 05.01 05.02 05.03 05.04 05.05 06.01 06.02 07.01 07.02 08.01 08.02 08.03 08.04 09.01 10.01 11.01 11.02 11.03 11.04 11.06 11.07 12.01
01.01 419522 0 0 78 0 51 0 22 0 3 30 0 50 0 0 0 94 0 0 11 243 91 148 119 420 0 140 18 1
02.01 0 200010 146 507 0 53 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9
02.02 0 107 392362 329 0 29 0 67 0 0 0 0 0 0 0 0 0 0 0 0 50 0 0 40 24 0 0 0 0
02.03 0 709 293 702842 51 42 19 16 0 0 0 0 0 0 0 0 86 0 0 31 92 0 0 0 0 0 5 0 0
03.01 0 15 0 33 119392 753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 12 0 0 0 0 0
03.02 13 0 0 0 472 132246 0 0 0 0 0 0 3 0 0 0 6 0 0 0 8 0 0 10 0 0 0 0 0
04.01 0 0 0 0 0 0 117769 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0
05.01 63 0 72 0 10 1 0 457597 149 94 717 0 11 0 0 0 574 9 58 184 18 2312 5 0 0 0 0 0 0
05.02 0 0 8 0 0 0 0 30 133427 108 272 98 0 0 0 0 21 0 0 0 21 0 0 2 0 0 0 0 0
05.03 6 0 0 0 0 0 0 17 30 69861 54 95 0 0 0 0 5 0 0 0 3 0 4 3 3 0 0 0 2
05.04 31 0 9 0 0 0 0 361 131 67 364573 38 6 0 0 0 17 0 0 0 0 17 0 7 18 0 0 0 0
05.05 0 0 0 4 0 0 0 14 117 195 60 37269 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0
06.01 21 0 0 24 0 3 0 13 0 7 6 0 130293 2312 0 0 15 0 0 7 93 0 21 21 30 0 19 0 7
06.02 3 0 0 0 0 0 0 0 0 0 0 0 614 56962 0 0 0 0 0 3 16 0 0 0 0 0 0 0 0
07.01 0 0 0 1 0 0 0 0 0 0 0 0 23 0 140463 242 0 0 0 0 25 0 0 0 0 0 0 0 0
07.02 0 0 0 98 3 0 10 0 0 19 0 0 0 0 534 314829 0 0 0 7 39 4 0 0 0 0 26 0 7
08.01 33 39 3 31 0 0 0 79 25 0 31 0 0 0 0 0 383456 364 145 352 29 71 0 0 5 0 0 0 0
08.02 0 0 3 0 0 0 0 43 0 0 0 0 0 0 0 0 1979 77311 43 60 4 11 0 70 0 0 0 0 0
08.03 0 0 0 0 2 0 0 14 0 0 4 0 0 0 0 0 199 14 40492 16 0 75 0 0 0 0 0 0 0
08.04 0 0 0 2 0 0 0 82 0 0 0 0 0 0 23 0 150 0 30 557345 0 38 0 0 0 0 0 0 0
09.01 389 35 142 584 43 149 606 139 17 18 120 0 102 0 112 58 281 61 0 138 7943129 184 548 768 840 37 284 99 529
10.01 25 0 2 4 0 0 0 363 0 0 0 0 20 0 0 1 131 0 47 29 24 248739 0 0 0 0 0 0 8
11.01 8 0 0 0 0 0 4 10 0 0 0 0 0 0 0 0 45 0 0 0 678 0 241581 86 331 10 858 210 0
11.02 20 0 136 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 11 43 54 58279 1921 22 937 5787 0
11.03 129 0 11 12 0 0 10 27 0 3 11 0 0 0 0 0 15 0 0 0 222 2 259 1373 749749 0 669 4329 21
11.04 0 0 0 0 0 0 0 0 0 0 0 0 6 2 0 0 0 0 0 0 0 0 84 136 32 48617 33 0 0
11.06 21 0 0 3 0 0 0 0 0 0 7 0 0 0 0 0 3 0 0 0 123 0 558 944 1065 25 194926 8382 0
11.07 0 0 34 0 0 0 0 7 0 0 3 0 0 0 0 0 8 0 0 0 4 0 160 1396 7185 3 817 75021 0
12.01 0 0 2 15 18 7 17 0 47 0 0 0 26 0 0 0 0 0 0 6 50 0 0 19 0 0 0 0 309401
12.02 0 0 3 0 0 8 0 0 0 0 0 0 7 0 0 0 0 0 0 0 78 0 0 6 0 0 0 0 409
Fuente: Estimaciones del CONAPO.

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora.

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_ZM) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
                as.data.frame() %>%
                 mutate(EDAD = as.numeric(.$EDAD)) %>%
                  subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                   group_by(CVE_ZM) %>%
                    summarise(Pob.ocupada = sum(FACTOR)) 

################################################################################
########################### Residentes #########################################
load(file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel municipal 2015_Base 2020.RData"))

ZM <- lapply(1:length(zm), function(x){
                 ZM_2020 %>% 
                  select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
                   filter(CVE_ZM %in% zm[x])  %>% 
                    pull(CVE_MUN)
})

Residentes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      as.data.frame() %>%
                                       tibble::rownames_to_column(var = "CVE_MUN") %>%
                                        melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                         mutate_at(vars(3), as.numeric) %>%
                                          filter(CVE_MUN == CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Residentes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Residentes <- do.call(rbind.data.frame, Residentes)

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      as.data.frame() %>%
                                       tibble::rownames_to_column(var = "CVE_MUN") %>%
                                        melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                         mutate_at(vars(3), as.numeric) %>%
                                          filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Inmigrantes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      t() %>%
                                       as.data.frame() %>%
                                        tibble::rownames_to_column(var = "CVE_MUN") %>%
                                         melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                          mutate_at(vars(3), as.numeric) %>%
                                           filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Emigrantes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Emigrantes <- do.call(rbind.data.frame, Emigrantes)

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
          left_join(., Residentes, by = c("CVE_ZM")) %>%
          left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
          left_join(., Emigrantes, by = c("CVE_ZM")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Metropolitano) 2015_Base 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Metropolitano) 2015_Base 2020.RData"))
Indicadores de movilidad laboral (Nivel metropolitano)
Zonas Metropolitanas
CVE_ZM Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
01.01 1 044 049 451 299 388 857 40 909 59 164 −18 255 100 073 10.94 15.83 −4.9 −118 328
02.01 486 639 210 634 200 010 1 067 1 474 −407 2 541 0.61 0.85 −0.2 −2 948
02.02 988 417 429 396 392 362 2 215 4 062 −1 847 6 277 0.62 1.15 −0.5 −8 124
02.03 1 738 304 780 921 695 231 11 342 11 714 −372 23 056 1.80 1.86 −0.1 −23 428
03.01 272 711 125 680 119 392 1 473 1 409 64 2 882 1.48 1.41 0.1 −2 818
03.02 287 671 137 887 132 246 804 2 024 −1 220 2 828 0.76 1.90 −1.1 −4 048
04.01 283 025 125 606 117 769 3 932 11 207 −7 275 15 139 3.85 10.97 −7.1 −22 414
05.01 1 283 835 505 163 400 662 66 776 68 763 −1 987 135 539 14.93 15.37 −0.4 −137 526
05.02 363 753 141 444 112 997 22 016 23 891 −1 875 45 907 17.43 18.92 −1.5 −47 782
05.03 194 293 76 295 66 827 3 899 8 332 −4 433 12 231 5.76 12.32 −6.6 −16 664
05.04 923 636 388 114 308 715 61 506 62 480 −974 123 986 18.76 19.05 −0.3 −124 960
05.05 106 754 41 053 34 282 4 607 6 834 −2 227 11 441 12.47 18.49 −6.0 −13 668
06.01 308 996 146 192 98 430 40 585 40 173 412 80 758 35.66 35.30 0.4 −80 346
06.02 152 790 64 070 55 987 4 122 3 791 331 7 913 7.60 6.99 0.6 −7 582
07.01 395 722 152 937 136 868 7 309 10 188 −2 879 17 497 5.33 7.43 −2.1 −20 376
07.02 814 436 344 137 287 753 40 102 40 987 −885 81 089 13.85 14.15 −0.3 −81 974
08.01 918 339 407 096 376 025 11 369 14 436 −3 067 25 805 3.43 4.36 −0.9 −28 872
08.02 209 693 85 115 70 989 10 067 8 289 1 778 18 356 13.66 11.25 2.4 −16 578
08.03 114 596 45 508 40 044 2 527 2 122 405 4 649 6.31 5.30 1.0 −4 244
08.04 1 391 180 597 127 557 345 924 2 589 −1 665 3 513 0.19 0.52 −0.3 −5 178
Fuente: Estimaciones del CONAPO.

Migración intrametropolitana

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "Pertenecen a la Zona Metropolitana") %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intrametropolitana_Base 2020.RDS"))

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora.

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_ZM) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
                as.data.frame() %>%
                 mutate(EDAD = as.numeric(.$EDAD)) %>%
                  subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                   group_by(CVE_ZM) %>%
                    summarise(Pob.ocupada = sum(FACTOR))  

################################################################################
########################### Residentes #########################################
MR <- readRDS(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matrices de Mtrab a nivel intramunicipal por ZM2015_Base 2020.RDS"))

Residentes <- lapply(1:length(zm), function(x){
                                     MR[[x]] %>% 
                                      as.data.frame() %>%
                                       melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                        mutate_at(vars(3), as.numeric) %>%
                                         filter(CVE_MUN == CVE_MUN_TRABAJO)  %>%
                                          summarize(Residentes =  sum(value, na.rm = TRUE)) %>% 
                                           mutate(CVE_ZM = !!paste0(zm[x])) 
})

Residentes <- do.call(rbind.data.frame, Residentes)

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
                                      MR[[x]] %>% 
                                       as.data.frame() %>%
                                        melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                         mutate_at(vars(3), as.numeric) %>%
                                          filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                           summarize(Inmigrantes =  sum(value, na.rm = TRUE)) %>% 
                                            mutate(CVE_ZM = !!paste0(zm[x])) 
})

Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
                                    MR[[x]] %>% 
                                     tibble::column_to_rownames(var = "CVE_MUN") %>%
                                      t() %>%
                                       as.data.frame() %>%
                                        tibble::rownames_to_column(var = "CVE_MUN") %>%
                                         melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                          mutate_at(vars(3), as.numeric) %>%
                                           filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                            summarize(Emigrantes=  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Emigrantes <- do.call(rbind.data.frame, Emigrantes)

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
          left_join(., Residentes, by = c("CVE_ZM")) %>%
          left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
          left_join(., Emigrantes, by = c("CVE_ZM")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intrametropolitano) 2015_Base 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intrametropolitano) 2015_Base 2020.RData"))
Indicadores de movilidad laboral (Nivel intrametropolitano)
Zonas Metropolitanas
CVE_ZM Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
01.01 1 044 049 451 299 388 857 30 665 30 665 0 61 330 8.2 8.2 0.0 −61 330
02.01 486 639 210 634 200 010 0 0 0 0 0.0 0.0 0.0 0
02.02 988 417 429 396 392 362 0 0 0 0 0.0 0.0 0.0 0
02.03 1 738 304 780 921 695 231 7 611 7 611 0 15 222 1.2 1.2 0.0 −15 222
03.01 272 711 125 680 119 392 0 0 0 0 0.0 0.0 0.0 0
03.02 287 671 137 887 132 246 0 0 0 0 0.0 0.0 0.0 0
04.01 283 025 125 606 117 769 0 0 0 0 0.0 0.0 0.0 0
05.01 1 283 835 505 163 400 662 56 935 56 935 0 113 870 12.7 12.7 0.0 −113 870
05.02 363 753 141 444 112 997 20 430 20 430 0 40 860 16.2 16.2 0.0 −40 860
05.03 194 293 76 295 66 827 3 034 3 034 0 6 068 4.5 4.5 0.0 −6 068
05.04 923 636 388 114 308 715 55 858 55 858 0 111 716 17.0 17.0 0.0 −111 716
05.05 106 754 41 053 34 282 2 987 2 987 0 5 974 8.1 8.1 0.0 −5 974
06.01 308 996 146 192 98 430 31 863 31 863 0 63 726 28.0 28.0 0.0 −63 726
06.02 152 790 64 070 55 987 975 975 0 1 950 1.8 1.8 0.0 −1 950
07.01 395 722 152 937 136 868 3 595 3 595 0 7 190 2.6 2.6 0.0 −7 190
07.02 814 436 344 137 287 753 27 076 27 076 0 54 152 9.3 9.3 0.0 −54 152
08.01 918 339 407 096 376 025 7 431 7 431 0 14 862 2.2 2.2 0.0 −14 862
08.02 209 693 85 115 70 989 6 322 6 322 0 12 644 8.6 8.6 0.0 −12 644
08.03 114 596 45 508 40 044 448 448 0 896 1.1 1.1 0.0 −896
08.04 1 391 180 597 127 557 345 0 0 0 0 0.0 0.0 0.0 0
Fuente: Estimaciones del CONAPO.

Migración intermetropolitana

Se utiliza la paquetería survey para poder trabajar con la muestra del cuestionario ampliado, en la cual se selecciona a la población de 15 años y más.

options(survey.lonely.psu = "adjust")

MC <- mydata %>%
      select(CVE_ENT, NOM_ENT, MUN, CVE_MUN, NOM_MUN, ENT_PAIS_TRAB, MUN_TRAB, CVE_MUN_TRABAJO, 
              EDAD, CONACT, CVE_ZM, NOM_ZM, CVE_ZM_TRABAJO, ZM_TRABAJO, FACTOR, ESTRATO, UPM) %>%
        # Se genera una indicadora de zm 
        mutate(I_ZM_2020 = ifelse(is.na(.$CVE_ZM), '0', '1'),
               I_TRAB_ZM_2020 = ifelse(is.na(.$CVE_ZM_TRABAJO), '0', '1')) %>%
        # Se clasifican a los migrantes internos 
        mutate(I_ZM = case_when(.$CVE_MUN == .$CVE_MUN_TRABAJO ~ 'Pertenecen a la Zona Metropolitana', #Trabajan en el mismo municipio
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM == .$CVE_ZM_TRABAJO ~ "Pertenecen a la Zona Metropolitana", #Trabajan en otro municipio dentro de la misma zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '1' & .$CVE_ZM != .$CVE_ZM_TRABAJO ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio pero de otra zona metropolitana
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '1' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana', #Trabajan en otro municipio que no pertenece a la zona metropolitana pero viven en una ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '1' ~ 'No pertenecen a la Zona Metropolitana', #Entran a trabajar a la zona metropolitana pero no pertecen a la ZM
                                .$CVE_MUN != .$CVE_MUN_TRABAJO & .$I_ZM_2020 %in% '0' & .$I_TRAB_ZM_2020 %in% '0' ~ 'No pertenecen a la Zona Metropolitana' #Trabajan en otro municipio que no es ZM y no residen en una ZM
                                )) %>%
         filter((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
          filter(CVE_MUN_TRABAJO %in% municipios & .$I_ZM %in% "No pertenecen a la Zona Metropolitana") %>%
           svydesign(data = ., id = ~ UPM, strata = ~ESTRATO, weight = ~FACTOR, nest = T)

saveRDS(MC, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/MC_intermetropolitana_Base 2020.RDS"))

Indicadores

Se realizan cálculos generales de migración:

  • Residentes

  • Inmigrantes

  • Emigrantes

  • % Inmigrantes

  • % Emigrante

  • Migración bruta

  • Migración Neta

  • % Tasa de migración bruta

  • % Tasa de migración neta

Se trabaja con la matriz cuadrada, la cual de esta manera no se satura la computadora.

################################################################################
############################ Población total ###################################
Pob.Total <- mydata %>%
              as.data.frame() %>%
               group_by(CVE_ZM) %>%
                summarise(Pob.Total = sum(FACTOR)) 

################################################################################
###################### Población ocupada #######################################
Pob.ocupada <- mydata %>%
                as.data.frame() %>%
                 mutate(EDAD = as.numeric(.$EDAD)) %>%
                  subset((EDAD >= 15 & EDAD <= 130) & (CONACT >= 10 & CONACT <= 20)) %>%
                   group_by(CVE_ZM) %>%
                    summarise(Pob.ocupada = sum(FACTOR)) 

################################################################################
########################### Residentes #########################################
load(paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Matriz de movilidad laboral a nivel intermunicipal 2015_Base 2020.RData"))

ZM <- lapply(1:length(zm), function(x){
                    ZM_2020 %>% 
                     select(CVE_ZM, CVE_MUN, NOM_MUN) %>%
                      filter(CVE_ZM %in% zm[x])  %>% 
                      pull(CVE_MUN)
})

Residentes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      as.data.frame() %>%
                                       tibble::rownames_to_column(var = "CVE_MUN") %>%
                                        melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                         mutate_at(vars(3), as.numeric) %>%
                                          filter(CVE_MUN == CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Residentes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Residentes <- do.call(rbind.data.frame, Residentes)

################################################################################
############################### Inmigrantes ####################################

## Población que sale de su entidad de residencia y entra a otra demarcación por motivos de trabajo
Inmigrantes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      as.data.frame() %>%
                                       tibble::rownames_to_column(var = "CVE_MUN") %>%
                                        melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                         mutate_at(vars(3), as.numeric) %>%
                                          filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Inmigrantes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Inmigrantes <- do.call(rbind.data.frame, Inmigrantes)

################################################################################
############################### Emigrantes #####################################

## Población que entra a la entidad para trabajar
Emigrantes <- lapply(1:length(zm), function(x){
                                     Migrantes %>% 
                                      t() %>%
                                       as.data.frame() %>%
                                        tibble::rownames_to_column(var = "CVE_MUN") %>%
                                         melt(., id.vars =  "CVE_MUN", variable.name = "CVE_MUN_TRABAJO") %>%
                                          mutate_at(vars(3), as.numeric) %>%
                                           filter(CVE_MUN != CVE_MUN_TRABAJO)  %>%
                                           filter(CVE_MUN %in% ZM[[x]]) %>%
                                            summarize(Emigrantes =  sum(value, na.rm = TRUE)) %>% 
                                             mutate(CVE_ZM = !!paste0(zm[x])) 
})

Emigrantes <- do.call(rbind.data.frame, Emigrantes)

tabla <- Pob.Total %>%
          left_join(., Pob.ocupada, by = c("CVE_ZM")) %>%
          left_join(., Residentes, by = c("CVE_ZM")) %>%
          left_join(., Inmigrantes, by = c("CVE_ZM")) %>%
          left_join(., Emigrantes, by = c("CVE_ZM")) %>%
           mutate(Mig.Neta = .$Inmigrantes - .$Emigrantes,
                  Mig.Bruta = .$Inmigrantes + .$Emigrantes, 
                  Tasa.Inmig = ((.$Inmigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Emig = ((.$Emigrantes/ 5) /((.$Pob.Total + .$Pob.ocupada) / 2)) * 1000,
                  Tasa.Mig = Tasa.Inmig - Tasa.Emig, 
                  Eficacia = Mig.Neta - Mig.Bruta)

write.xlsx(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intermetropolitano) 2015_Base 2020.xlsx"), overwrite = TRUE)
save(tabla, file = paste0(here::here(), "/Output/Municipio/06_Zonas Metropolitanas/2015/03_Movilidad laboral/Base 2020/Indicadores de MTrab por ZM 2015 (Intermetropolitano) 2015_Base 2020.RData"))
Indicadores de movilidad laboral (Nivel intermetropolitano)
Zonas Metropolitanas
CVE_ZM Pob.Total Pob.ocupada Residentes Inmigrantes Emigrantes Mig.Neta Mig.Bruta Tasa.Inmig Tasa.Emig Tasa.Mig Eficacia
01.01 1 044 049 451 299 0 10 244 28 499 −18 255 38 743 2.74 7.62 −4.9 −56 998
02.01 486 639 210 634 0 1 067 1 474 −407 2 541 0.61 0.85 −0.2 −2 948
02.02 988 417 429 396 0 2 215 4 062 −1 847 6 277 0.62 1.15 −0.5 −8 124
02.03 1 738 304 780 921 0 3 731 4 103 −372 7 834 0.59 0.65 −0.1 −8 206
03.01 272 711 125 680 0 1 473 1 409 64 2 882 1.48 1.41 0.1 −2 818
03.02 287 671 137 887 0 804 2 024 −1 220 2 828 0.76 1.90 −1.1 −4 048
04.01 283 025 125 606 0 3 932 11 207 −7 275 15 139 3.85 10.97 −7.1 −22 414
05.01 1 283 835 505 163 0 9 841 11 828 −1 987 21 669 2.20 2.64 −0.4 −23 656
05.02 363 753 141 444 0 1 586 3 461 −1 875 5 047 1.26 2.74 −1.5 −6 922
05.03 194 293 76 295 0 865 5 298 −4 433 6 163 1.28 7.83 −6.6 −10 596
05.04 923 636 388 114 0 5 648 6 622 −974 12 270 1.72 2.02 −0.3 −13 244
05.05 106 754 41 053 0 1 620 3 847 −2 227 5 467 4.38 10.41 −6.0 −7 694
06.01 308 996 146 192 0 8 722 8 310 412 17 032 7.66 7.30 0.4 −16 620
06.02 152 790 64 070 0 3 147 2 816 331 5 963 5.80 5.19 0.6 −5 632
07.01 395 722 152 937 0 3 714 6 593 −2 879 10 307 2.71 4.81 −2.1 −13 186
07.02 814 436 344 137 0 13 026 13 911 −885 26 937 4.50 4.80 −0.3 −27 822
08.01 918 339 407 096 0 3 938 7 005 −3 067 10 943 1.19 2.11 −0.9 −14 010
08.02 209 693 85 115 0 3 745 1 967 1 778 5 712 5.08 2.67 2.4 −3 934
08.03 114 596 45 508 0 2 079 1 674 405 3 753 5.19 4.18 1.0 −3 348
08.04 1 391 180 597 127 0 924 2 589 −1 665 3 513 0.19 0.52 −0.3 −5 178
Fuente: Estimaciones del CONAPO.

Referencias

Librerias que se usaron en el documento

package loadedversion source
Cairo 1.6-1 CRAN (R 4.3.1)
chorddiag 0.1.3 Github ()
circlize 0.4.15 CRAN (R 4.3.1)
doMC 1.3.5 R-Forge (R 4.3.1)
dplyr 1.1.3 CRAN (R 4.3.2)
expss 0.11.6 CRAN (R 4.3.1)
foreach 1.5.2 CRAN (R 4.3.1)
ggalluvial 0.12.5 CRAN (R 4.3.1)
ggplot2 3.4.3 CRAN (R 4.3.1)
ggpubr 0.6.0 CRAN (R 4.3.1)
ggrepel 0.9.3 CRAN (R 4.3.1)
ggsankey 0.0.99999 Github ()
gt 0.10.0 CRAN (R 4.3.1)
haven 2.5.3 CRAN (R 4.3.1)
Hmisc 5.1-0 CRAN (R 4.3.1)
iterators 1.0.14 CRAN (R 4.3.1)
janitor 2.2.0 CRAN (R 4.3.1)
kableExtra 1.3.4 CRAN (R 4.3.1)
knitr 1.45 CRAN (R 4.3.2)
maditr 0.8.3 CRAN (R 4.3.1)
Matrix 1.6-1.1 CRAN (R 4.3.1)
network 1.18.1 CRAN (R 4.3.1)
openxlsx 4.2.5.2 CRAN (R 4.3.1)
reshape2 1.4.4 CRAN (R 4.3.1)
sjlabelled 1.2.0 CRAN (R 4.3.1)
sna 2.7-1 CRAN (R 4.3.1)
srvyr 1.2.0 CRAN (R 4.3.1)
statnet.common 4.9.0 CRAN (R 4.3.1)
stringr 1.5.0 CRAN (R 4.3.1)
survey 4.2 Github ()
survival 3.5-5 CRAN (R 4.3.1)
tibble 3.2.1 CRAN (R 4.3.1)
tidyr 1.3.1 CRAN (R 4.3.3)

Creative Commons Licence
This work by Diana Villasana Ocampo is licensed under a Creative Commons Attribution 4.0 International License.